<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
</html>
<script>
    // 栈题目
    function smartRepeat(templateStr){
        let index =0;
        // 栈1，存放数字
        let stack1 = []
        // 栈2,存放临时字符
        let stack2 =[]
        // 剩余部分
        let rest = templateStr

        while(index<templateStr.length-1){
            // 剩余部分
            rest = templateStr.substring(index)
            // 查看当前剩余部分是否已数字开头
            if(/^\d+\[/.test(rest)){
                let time = Number(rest.match(/^(\d+)\[/)[1])
                // 把数字压栈
                stack1.push(time)
                stack2.push('')
                index += time.toString().length+1
            }else if(/^\w+\]/.test(rest)){
                // 如果这个字符是字母，就把栈顶这项改成这个字母
                let word = rest.match(/^(\w+)\]/)[1];
                stack2[stack2.length-1] = word
                index+= word.length
            }
            else if(rest[0]==']'){
                // 如果这个字符是],那么就①将stack1弹栈，将stack2弹栈，③把字符串栈的新栈顶的元素重复刚刚弹出的那个字符串指定次数拼接到新栈顶上
                let times = stack1.pop()
                let word = stack2.pop()
                // repeat是ES6的方法，比如'a'.repeat(3) 就是'aaa'
                stack2[stack2.length-1]+=word.repeat(times)
                index++
            }

        }
        // while循环结束后，stack1和stack2肯定还有剩余1项，返回栈2中剩下的这一项，重复栈1中剩下的这1项次数，组成这个字符串，如果剩余的个数不对，那就是用户问题，
        //方括号没有闭合
        return stack2[0].repeat(stack1[0])
    }

    console.log(smartRepeat('3[2[a]2[b]]'));
</script>
